import { ColorSeries } from "./color";
import {ProjectTypeOption} from "./config";

// 扫描选项
export interface ProjectScanOptions {
  // 扫描深度
  depth: number;
  // 排除的目录
  excludes?: string[];
  // 项目类型配置
  projectTypes?: Record<string, ProjectTypeOption>
}

// 项目扫描结果
export interface ProjectScanResult {
  // 根目录路径
  rootPath: string;
  // 项目列表
  projects: ProjectSimpleTree[];
  // 扫描时间
  timestamp: number;
  // 扫描选项
  scanOptions: ProjectScanOptions;
}

// 简单项目信息
export interface ProjectSimpleInfo {
  icon?: string,
  // 项目类型
  type: string;
  // 项目路径
  path: string;
  // 名称，项目文件夹名
  name: string;
  // 颜色系列
  colors: ColorSeries;
}

// 简单项目树
export interface ProjectSimpleTree extends ProjectSimpleInfo {
  // 子项目
  children?: ProjectSimpleTree[]
}

// 项目详情信息
export type ProjectInfo = ProjectSimpleInfo & ScannerResult;

// 项目详细信息
export interface ScannerMore {
  // 标题
  title: string;
  // 图标
  icon?: string;
  // 类型
  type: 'text' | 'table' | 'json' | 'markdown' | 'html';
  // 内容
  content?: string;
  // 列表
  list: Record<string, any>[]
}

// 扫描结果
export interface ScannerResult {
  // 项目名称
  projectName: string;
  // 基本信息
  basicInfo?: Record<string, any>[];
  // 更多信息
  mores?: ScannerMore[]
}

/**
 * 扫描器接口
 * @param projectPath 项目路径
 * @returns 扫描结果，为空或未定义表示未扫描到项目
 */
export type IScanner = (projectPath: string) => Promise<ScannerResult | null | undefined>;

// nodeModules扫描结果
export interface NodeModulesScanResult {
  path: string,
  size?: number
}
